//
//  ViewController.swift
//  EmoticonsDemo
//
//  Created by Summer on 2017/12/19.
//  Copyright © 2017年 Summer. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var testLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 目标：我[爱你]啊[笑哈哈]哈哈[马上有对象]
        /*
         注意：应该倒序遍历替换
         我[爱你]啊[笑哈哈]哈哈[马上有对象]
         range1 {1, 4}
         range2 {6, 5}
         range3 {13, 7}
         
         顺序替换的话，后面的range结果不对
         */
        let attrString = "我[爱你]啊[笑哈哈]哈哈[马上有对象]"
//        testLabel.attributedText = emoticonString(string: attrString)
        testLabel.attributedText = CZEmoticonManager.shared.emoticonString(string: attrString, font: testLabel.font)
    }

    /// 将给定的字符串转换成属性文本
    /// - 关键点：要按照匹配结果倒序替换属性文本!
    /// - Parameter string: 完整的字符串
    /// - Returns: 属性文本
    func emoticonString(string: String) -> NSAttributedString {
        
        let attrString = NSMutableAttributedString(string: string)
        
        // 1.建立正则表达式，过滤所有表情
        // [] ()都是正则表达式的关键字，如果参与匹配需要转义
        let pattern = "\\[.*?\\]"
        guard let regx = try? NSRegularExpression(pattern: pattern, options: []) else {
            return attrString
        }
        
        // 2.匹配所有项
        let matchs = regx.matches(in: string, options: [], range: NSRange(location: 0, length: string.count))
        
        // 遍历所有匹配结果(倒序遍历)
        for match in matchs.reversed() {
            let range = match.range(at: 0)
            print("location--\(range.location), length--\(range.length)")
            let subStr = (attrString.string as NSString).substring(with: range)
            
            // 1.查找对应的表情符号
            if let emoticon = CZEmoticonManager.shared.findEmoticon(string: subStr) {
                
                // 2.使用表情符号中的属性文本，替换原有的属性文本的内容
                attrString.replaceCharacters(in: range, with: emoticon.imageText(font: testLabel.font))
            }
        }
        
        return attrString
    }
    
    func demo() {
        
        // MARK: 测试单例
        let m = CZEmoticonManager.shared
        print(m.packages)
        
        // MARK: 测试表情图像
        print(m.packages.last?.emoticons.first?.image)
        print(m.packages.last?.emoticons.first)
        
        // MARK: 测试查找表情
        print(m.findEmoticon(string: "[爱你]"))
        
        // MARK: 测试直接生成图像表情文本
        let em = m.findEmoticon(string: "[马上有对象]")
        testLabel.attributedText = em?.imageText(font: testLabel.font)
    }


}

